#include "FileHandler.h"
#include <fstream>
#include <iostream>
#include <sstream> // for std::istringstream

// 保存学生信息到文件, 参数：学生信息的容器，文件名
bool FileHandler::saveStudentsToFile(const std::vector<Student> &students, const std::string &filename)
{
    std::ofstream outFile;
    outFile.open(filename, std::ios::trunc);
    if (!outFile.is_open())
    {
        std::cout << "文件" << filename << "打开失败！" << std::endl;
        return false;
    }
    for (const auto &Student : students)
    {
        outFile << Student.getId() << " " << Student.getName() << " " << Student.getScore() << std::endl;
    }
    outFile.close();
    return true;
}

// 从指定文件加载学生信息, 参数：学生信息的容器，文件名
bool FileHandler::loadStudentsFromFile(std::vector<Student> &students, const std::string &filename)
{
    std::ifstream inFile;
    inFile.open(filename, std::ios::in);
    if (!inFile)
    {
        std::cerr << "无法打开文件 " << filename << " 进行读取！" << std::endl;
        return false;
    }

    students.clear();
    int id;
    std::string name;
    float score;

    while (inFile >> id >> name >> score)
    {
        students.emplace_back(id, name, score);
    }

    inFile.close();
    return true;
}

// 保存用户认证信息到文件,参数：用户信息的容器，文件名
bool FileHandler::saveUsersToFile(const std::map<std::string, std::string> &users, const std::string &filename)
{
    std::ofstream outFile;
    outFile.open(filename, std::ios::trunc);

    if (!outFile.is_open())
    {
        std::cout << "文件" << filename << "打开失败！" << std::endl;
        return false;
    }
    for (const auto &user : users)
    {
        outFile << user.first << " " << user.second << std::endl;
    }
    outFile.close();
    return true;
}

// 从指定文件加载用户认证信息, 参数：用户信息的容器，文件名
bool FileHandler::loadUsersFromFile(std::map<std::string, std::string> &users, const std::string &filename)
{
    std::ifstream inFile;
    inFile.open(filename, std::ios::in);
    if (!inFile)
    {
        std::cerr << "无法打开文件 " << filename << " 进行读取！" << std::endl;
        return false;
    }

    users.clear();

    std::string username, password;

    while (inFile >> username >> password)
    {
        users[username] = password;
    }

    inFile.close();
    return true;
}

// 根据用户身份存储不同的数据文件（可选）
std::string FileHandler::getFilePath(const std::string &username, const std::string &role)
{
    return std::string();
}
// 处理文件路径和名称
std::string FileHandler::constructFilePath(const std::string &baseName, const std::string &role)
{
    return std::string();
}
